﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Entidad;
using System.Data;
using System.Data.SqlClient;
namespace DAO
{
   public class InformeVentasQueryDAO: InformeVentasInterface
    {
        private DAO_v2 dao;
        public DataView ObtenerInforme()
        {
            dao = new DAO_v2();
            SqlConnection con = new SqlConnection(DAO_v2.MiCadenaConexion());
            try
            {
                con.Open();
                List<String> tablas = new List<String>();
                List<String> columnas = new List<String>();
                List<String> fk = new List<String>();
                List<String> pk = new List<String>();
                List<String> parametros = new List<String>();
                List<Object> datos = new List<Object>();
                tablas.Add("Libro");
                tablas.Add("Factura");
                tablas.Add("DetalleFactura");
                tablas.Add("TipoFactura");
                tablas.Add("Ejemplar");
                columnas.Add("Libro.titulo as 'Titulo'");
                columnas.Add("Factura.numero as 'NroFactura'");
                columnas.Add("TipoFactura.nombre as 'TipoFactura'");
                columnas.Add("DetalleFactura.precio as 'Precio'");
                columnas.Add("Factura.fecha as 'FechaVenta'");
                columnas.Add("Ejemplar.codigo as 'Codigo'");
                fk.Add("Ejemplar.id_Libro");
                pk.Add("Libro.id_Libro");
                fk.Add("DetalleFactura.id_Ejemplar"); 
                pk.Add("Ejemplar.id_Ejemplar");          
                fk.Add("DetalleFactura.id_Factura");
                pk.Add("Factura.id_Factura");
                fk.Add("Factura.id_TipoFactura");
                pk.Add("TipoFactura.id_TipoFactura");
                parametros.Add("anulada");
                datos.Add(false);

                SqlCommand cmd = dao.BuscarVariasTablasConFiltro(tablas, columnas, fk, pk, parametros, datos);
                //SqlCommand cmd = dao.BuscarVariasTablasSinFiltro(tablas, columnas, fk, pk);
                cmd.Connection = con;
                DataTable dt = new DataTable();
                dt.Load(cmd.ExecuteReader());
                DataView dv = new DataView(dt);
               
                return dv;
            }
            catch (SqlException ex)
            {
                return null;
                throw new ApplicationException("Error al obtener el InformeQuery...");
            }
            finally
            {
                dao.CerrarConexion(con);
            }
        }



        public DataView ObtenerInforme(String filtros)
        {
            dao = new DAO_v2();
            SqlConnection con = new SqlConnection(DAO_v2.MiCadenaConexion());
            try
            {
                con.Open();
                List<String> tablas = new List<String>();
                List<String> columnas = new List<String>();
                List<String> fk = new List<String>();
                List<String> pk = new List<String>();
                tablas.Add("Libro");
                tablas.Add("Factura");
                tablas.Add("DetalleFactura");
                tablas.Add("TipoFactura");
                tablas.Add("Ejemplar");
                columnas.Add("Libro.titulo as 'Titulo'");
                columnas.Add("Factura.numero as 'NroFactura'");
                columnas.Add("TipoFactura.nombre as 'TipoFactura'");
                columnas.Add("DetalleFactura.precio as 'Precio'");
                columnas.Add("Factura.fecha as 'FechaVenta'");
                columnas.Add("Ejemplar.codigo as 'Codigo'");
                fk.Add("Ejemplar.id_Libro");
                pk.Add("Libro.id_Libro");
                fk.Add("DetalleFactura.id_Ejemplar");
                pk.Add("Ejemplar.id_Ejemplar");
                fk.Add("DetalleFactura.id_Factura");
                pk.Add("Factura.id_Factura");
                fk.Add("Factura.id_TipoFactura");
                pk.Add("TipoFactura.id_TipoFactura" + filtros);


                SqlCommand cmd = dao.BuscarVariasTablasSinFiltro(tablas, columnas, fk, pk);
                cmd.Connection = con;
                DataTable dt = new DataTable();
                dt.Load(cmd.ExecuteReader());
                DataView dv = new DataView(dt);
                return dv;
            }
            catch (SqlException ex)
            {
                return null;
                throw new ApplicationException("Error al obtener el InformeQuery...");
            }
            finally
            {
                dao.CerrarConexion(con);
            }
        }
    }
}
